{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# CNN for Trading"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Fast-forward to 2012, and we move on to the deeper and more modern AlexNet architecture. We will use the CIFAR10 dataset that uses 60,000 ImageNet samples, compressed to 32x32 pixel resolution (from the original 224x224), but still with three color channels. There are only 10 of the original 1,000 classes. See the notebook cifar10_image_classification for implementation details; we will skip here over some repetitive steps. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:11.384791Z",
     "start_time": "2020-06-21T21:56:11.382806Z"
    }
   },
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:12.898543Z",
     "start_time": "2020-06-21T21:56:11.386738Z"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "from time import time\n",
    "from pathlib import Path\n",
    "import sys, os\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from scipy.stats import spearmanr\n",
    "\n",
    "import tensorflow as tf\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:12.923140Z",
     "start_time": "2020-06-21T21:56:12.899690Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using GPU\n"
     ]
    }
   ],
   "source": [
    "gpu_devices = tf.config.experimental.list_physical_devices('GPU')\n",
    "if gpu_devices:\n",
    "    print('Using GPU')\n",
    "    tf.config.experimental.set_memory_growth(gpu_devices[0], True)\n",
    "else:\n",
    "    print('Using CPU')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:12.935522Z",
     "start_time": "2020-06-21T21:56:12.923971Z"
    }
   },
   "outputs": [],
   "source": [
    "sys.path.insert(1, os.path.join(sys.path[0], '..'))\n",
    "from utils import MultipleTimeSeriesCV, format_time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:12.944023Z",
     "start_time": "2020-06-21T21:56:12.936467Z"
    }
   },
   "outputs": [],
   "source": [
    "sns.set_style('whitegrid')\n",
    "np.random.seed(42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:12.952404Z",
     "start_time": "2020-06-21T21:56:12.945117Z"
    }
   },
   "outputs": [],
   "source": [
    "size = 15\n",
    "lookahead = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:12.960719Z",
     "start_time": "2020-06-21T21:56:12.954930Z"
    }
   },
   "outputs": [],
   "source": [
    "results_path = Path('results', 'cnn_for_trading')\n",
    "if not results_path.exists():\n",
    "    results_path.mkdir(parents=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load Model Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:17.188921Z",
     "start_time": "2020-06-21T21:56:12.962174Z"
    }
   },
   "outputs": [],
   "source": [
    "with pd.HDFStore('data.h5') as store:\n",
    "    features = store['img_data']\n",
    "    targets = store['targets']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:17.237508Z",
     "start_time": "2020-06-21T21:56:17.189932Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 2378283 entries, ('A', Timestamp('2001-01-02 00:00:00')) to ('ZTS', Timestamp('2017-12-28 00:00:00'))\n",
      "Columns: 225 entries, 01_CMO to 11_WMA\n",
      "dtypes: float32(225)\n",
      "memory usage: 2.0+ GB\n"
     ]
    }
   ],
   "source": [
    "features.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:17.276586Z",
     "start_time": "2020-06-21T21:56:17.238550Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 2378283 entries, ('A', Timestamp('2001-01-02 00:00:00')) to ('ZTS', Timestamp('2017-12-28 00:00:00'))\n",
      "Data columns (total 4 columns):\n",
      " #   Column      Dtype  \n",
      "---  ------      -----  \n",
      " 0   r01_fwd     float64\n",
      " 1   r01dec_fwd  float64\n",
      " 2   r05_fwd     float64\n",
      " 3   r05dec_fwd  float64\n",
      "dtypes: float64(4)\n",
      "memory usage: 81.9+ MB\n"
     ]
    }
   ],
   "source": [
    "targets.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:19.977591Z",
     "start_time": "2020-06-21T21:56:17.277603Z"
    }
   },
   "outputs": [],
   "source": [
    "outcome = f'r{lookahead:02}_fwd'\n",
    "features = features.join(targets[[outcome]]).dropna()\n",
    "target = features[outcome]\n",
    "features = features.drop(outcome, axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Convolutional Neural Network"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Model Architecture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:19.984084Z",
     "start_time": "2020-06-21T21:56:19.978519Z"
    }
   },
   "outputs": [],
   "source": [
    "def make_model(filter1=16, act1='relu', filter2=32, act2='relu', do1=.25, do2=.5, dense=32):\n",
    "    input_shape = (size, size, 1)\n",
    "    cnn = Sequential([\n",
    "        Conv2D(filters=filter1,\n",
    "               kernel_size=3,\n",
    "               padding='same',\n",
    "               activation=act1,\n",
    "               input_shape=input_shape,\n",
    "               name='CONV1'),\n",
    "        Conv2D(filters=filter2,        \n",
    "               kernel_size=3,  \n",
    "               padding='same',\n",
    "               activation=act2,\n",
    "               name='CONV2'),\n",
    "        MaxPooling2D(pool_size=2, name='POOL2'),\n",
    "        Dropout(do1, name='DROP1'),\n",
    "        Flatten(name='FLAT1'),\n",
    "        Dense(dense, activation='relu', name='FC1'),\n",
    "        Dropout(do2, name='DROP2'),\n",
    "        Dense(1, activation='linear', name='FC2')\n",
    "    ])\n",
    "    cnn.compile(loss='mse',\n",
    "                optimizer=tf.keras.optimizers.SGD(learning_rate=0.01, \n",
    "                                                  momentum=0.9, \n",
    "                                                  nesterov=False, \n",
    "                                                  name='SGD'),\n",
    "                metrics=[tf.keras.metrics.RootMeanSquaredError(name='rmse')])\n",
    "    return cnn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:20.975582Z",
     "start_time": "2020-06-21T21:56:19.985417Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "CONV1 (Conv2D)               (None, 15, 15, 16)        160       \n",
      "_________________________________________________________________\n",
      "CONV2 (Conv2D)               (None, 15, 15, 32)        4640      \n",
      "_________________________________________________________________\n",
      "POOL2 (MaxPooling2D)         (None, 7, 7, 32)          0         \n",
      "_________________________________________________________________\n",
      "DROP1 (Dropout)              (None, 7, 7, 32)          0         \n",
      "_________________________________________________________________\n",
      "FLAT1 (Flatten)              (None, 1568)              0         \n",
      "_________________________________________________________________\n",
      "FC1 (Dense)                  (None, 32)                50208     \n",
      "_________________________________________________________________\n",
      "DROP2 (Dropout)              (None, 32)                0         \n",
      "_________________________________________________________________\n",
      "FC2 (Dense)                  (None, 1)                 33        \n",
      "=================================================================\n",
      "Total params: 55,041\n",
      "Trainable params: 55,041\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "cnn = make_model()\n",
    "cnn.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Train the Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:20.978637Z",
     "start_time": "2020-06-21T21:56:20.976703Z"
    }
   },
   "outputs": [],
   "source": [
    "train_period_length = 5 * 12 * 21\n",
    "test_period_length = 5 * 21\n",
    "n_splits = 16"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:20.989278Z",
     "start_time": "2020-06-21T21:56:20.979694Z"
    }
   },
   "outputs": [],
   "source": [
    "cv = MultipleTimeSeriesCV(n_splits=n_splits,\n",
    "                          train_period_length=train_period_length,\n",
    "                          test_period_length=test_period_length,\n",
    "                          lookahead=lookahead)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:20.998775Z",
     "start_time": "2020-06-21T21:56:20.990710Z"
    }
   },
   "outputs": [],
   "source": [
    "def get_train_valid_data(X, y, train_idx, test_idx):\n",
    "    x_train, y_train = X.iloc[train_idx, :], y.iloc[train_idx]\n",
    "    x_val, y_val = X.iloc[test_idx, :], y.iloc[test_idx]\n",
    "    scaler = MinMaxScaler(feature_range=(-1, 1))\n",
    "    x_train = scaler.fit_transform(x_train)\n",
    "    x_val = scaler.transform(x_val)\n",
    "    return (x_train.reshape(-1, size, size, 1), y_train,\n",
    "            x_val.reshape(-1, size, size, 1), y_val)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:21.009730Z",
     "start_time": "2020-06-21T21:56:20.999983Z"
    }
   },
   "outputs": [],
   "source": [
    "batch_size = 64"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-21T21:56:21.019183Z",
     "start_time": "2020-06-21T21:56:21.010627Z"
    }
   },
   "outputs": [],
   "source": [
    "checkpoint_path = results_path / f'lookahead_{lookahead:02d}'\n",
    "if not checkpoint_path.exists():\n",
    "    checkpoint_path.mkdir(parents=True, exist_ok=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T00:10:02.313870Z",
     "start_time": "2020-06-21T21:56:21.020417Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "00:00:31 01 | 01 |  0.0086 |  0.0232\n",
      "00:00:56 01 | 02 | -0.0117 | -0.0006\n",
      "00:01:25 01 | 03 |  0.0133 |  0.0006\n",
      "00:01:53 01 | 04 | -0.0072 | -0.0043\n",
      "00:02:22 01 | 05 |  0.0136 |  0.0082\n",
      "00:02:50 01 | 06 | -0.0026 | -0.0197\n",
      "00:03:17 01 | 07 |  0.0020 |  0.0095\n",
      "00:03:45 01 | 08 | -0.0108 | -0.0095\n",
      "00:04:13 01 | 09 | -0.0103 | -0.0076\n",
      "00:04:42 01 | 10 | -0.0125 | -0.0047\n",
      "00:05:10 01 | 11 |  0.0136 | -0.0003\n",
      "00:05:38 01 | 12 |  0.0137 |  0.0014\n",
      "00:06:06 01 | 13 | -0.0053 | -0.0195\n",
      "00:06:34 01 | 14 |  0.0095 |  0.0111\n",
      "00:07:03 01 | 15 | -0.0111 | -0.0102\n",
      "00:07:32 01 | 16 | -0.0058 | -0.0297\n",
      "00:08:00 01 | 17 | -0.0132 | -0.0062\n",
      "00:08:29 01 | 18 |  0.0038 |  0.0234\n",
      "00:08:57 01 | 19 | -0.0055 | -0.0238\n",
      "00:09:26 01 | 20 |  0.0129 |  0.0066\n",
      "00:09:54 01 | 21 |  0.0050 |  0.0226\n",
      "00:10:23 01 | 22 | -0.0023 | -0.0127\n",
      "00:10:52 01 | 23 | -0.0133 | -0.0099\n",
      "00:11:21 01 | 24 | -0.0121 | -0.0095\n",
      "00:11:50 01 | 25 | -0.0106 | -0.0152\n",
      "00:12:21 02 | 01 | -0.0057 | -0.0116\n",
      "00:12:47 02 | 02 | -0.0059 | -0.0083\n",
      "00:13:16 02 | 03 | -0.0027 | -0.0017\n",
      "00:13:44 02 | 04 | -0.0053 | -0.0013\n",
      "00:14:13 02 | 05 | -0.0019 |  0.0040\n",
      "00:14:40 02 | 06 | -0.0068 | -0.0162\n",
      "00:15:08 02 | 07 | -0.0069 | -0.0117\n",
      "00:15:37 02 | 08 | -0.0073 | -0.0117\n",
      "00:16:15 02 | 09 | -0.0060 | -0.0117\n",
      "00:16:50 02 | 10 | -0.0077 | -0.0139\n",
      "00:17:20 02 | 11 | -0.0062 | -0.0060\n",
      "00:17:48 02 | 12 | -0.0070 | -0.0111\n",
      "00:18:17 02 | 13 | -0.0027 | -0.0104\n",
      "00:18:47 02 | 14 | -0.0055 | -0.0054\n",
      "00:19:16 02 | 15 | -0.0082 | -0.0091\n",
      "00:19:44 02 | 16 | -0.0103 | -0.0098\n",
      "00:20:13 02 | 17 | -0.0006 | -0.0000\n",
      "00:20:42 02 | 18 | -0.0075 | -0.0013\n",
      "00:21:12 02 | 19 | -0.0062 | -0.0006\n",
      "00:21:41 02 | 20 | -0.0057 | -0.0107\n",
      "00:22:10 02 | 21 | -0.0077 | -0.0104\n",
      "00:22:39 02 | 22 | -0.0023 | -0.0085\n",
      "00:23:09 02 | 23 | -0.0015 | -0.0106\n",
      "00:23:38 02 | 24 | -0.0011 | -0.0081\n",
      "00:24:07 02 | 25 |  0.0048 |  0.0058\n",
      "00:24:26 03 | 01 |  0.0118 | -0.0136\n",
      "00:24:45 03 | 02 |  0.0205 | -0.0037\n",
      "00:25:03 03 | 03 |  0.0176 |  0.0066\n",
      "00:25:21 03 | 04 |  0.0072 | -0.0034\n",
      "00:25:39 03 | 05 |  0.0122 | -0.0130\n",
      "00:25:56 03 | 06 |  0.0120 | -0.0009\n",
      "00:26:14 03 | 07 |  0.0130 | -0.0015\n",
      "00:26:32 03 | 08 |  0.0123 | -0.0059\n",
      "00:26:50 03 | 09 |  0.0154 | -0.0053\n",
      "00:27:09 03 | 10 |  0.0184 |  0.0052\n",
      "00:27:27 03 | 11 |  0.0166 |  0.0124\n",
      "00:27:44 03 | 12 |  0.0191 |  0.0020\n",
      "00:28:02 03 | 13 |  0.0115 |  0.0026\n",
      "00:28:20 03 | 14 |  0.0060 | -0.0123\n",
      "00:28:38 03 | 15 |  0.0173 |  0.0058\n",
      "00:28:55 03 | 16 |  0.0156 |  0.0121\n",
      "00:29:14 03 | 17 |  0.0144 |  0.0093\n",
      "00:29:32 03 | 18 |  0.0180 |  0.0031\n",
      "00:29:50 03 | 19 |  0.0183 |  0.0026\n",
      "00:30:07 03 | 20 |  0.0159 |  0.0065\n",
      "00:30:25 03 | 21 |  0.0090 | -0.0051\n",
      "00:30:43 03 | 22 |  0.0136 |  0.0105\n",
      "00:31:00 03 | 23 |  0.0167 |  0.0024\n",
      "00:31:19 03 | 24 |  0.0178 | -0.0017\n",
      "00:31:37 03 | 25 |  0.0137 |  0.0140\n",
      "00:32:08 04 | 01 | -0.0104 | -0.0113\n",
      "00:32:38 04 | 02 | -0.0057 | -0.0064\n",
      "00:33:08 04 | 03 |  0.0086 |  0.0076\n",
      "00:33:37 04 | 04 |  0.0070 |  0.0170\n",
      "00:34:07 04 | 05 |  0.0090 |  0.0084\n",
      "00:34:36 04 | 06 |  0.0076 |  0.0122\n",
      "00:35:07 04 | 07 |  0.0088 |  0.0110\n",
      "00:35:37 04 | 08 |  0.0073 |  0.0105\n",
      "00:36:06 04 | 09 |  0.0062 |  0.0025\n",
      "00:36:36 04 | 10 |  0.0059 |  0.0030\n",
      "00:37:05 04 | 11 |  0.0060 | -0.0025\n",
      "00:37:35 04 | 12 |  0.0090 |  0.0016\n",
      "00:38:05 04 | 13 |  0.0074 | -0.0027\n",
      "00:38:23 04 | 14 |  0.0072 | -0.0009\n",
      "00:38:39 04 | 15 |  0.0076 |  0.0030\n",
      "00:38:55 04 | 16 |  0.0051 |  0.0016\n",
      "00:39:09 04 | 17 |  0.0071 |  0.0091\n",
      "00:39:24 04 | 18 |  0.0061 | -0.0030\n",
      "00:39:39 04 | 19 |  0.0043 | -0.0045\n",
      "00:39:54 04 | 20 |  0.0083 |  0.0031\n",
      "00:40:11 04 | 21 |  0.0116 |  0.0002\n",
      "00:40:29 04 | 22 |  0.0073 | -0.0066\n",
      "00:40:46 04 | 23 |  0.0105 | -0.0083\n",
      "00:41:03 04 | 24 |  0.0112 | -0.0050\n",
      "00:41:22 04 | 25 |  0.0109 | -0.0013\n",
      "00:41:40 05 | 01 |  0.0078 |  0.0108\n",
      "00:41:58 05 | 02 |  0.0056 |  0.0065\n",
      "00:42:15 05 | 03 |  0.0079 |  0.0103\n",
      "00:42:33 05 | 04 |  0.0089 |  0.0295\n",
      "00:42:51 05 | 05 |  0.0127 |  0.0343\n",
      "00:43:08 05 | 06 |  0.0153 |  0.0399\n",
      "00:43:24 05 | 07 |  0.0129 |  0.0374\n",
      "00:43:42 05 | 08 |  0.0157 |  0.0389\n",
      "00:43:60 05 | 09 |  0.0152 |  0.0389\n",
      "00:44:19 05 | 10 |  0.0166 |  0.0399\n",
      "00:44:36 05 | 11 |  0.0175 |  0.0431\n",
      "00:44:53 05 | 12 |  0.0159 |  0.0379\n",
      "00:45:08 05 | 13 |  0.0160 |  0.0379\n",
      "00:45:24 05 | 14 |  0.0165 |  0.0165\n",
      "00:45:40 05 | 15 |  0.0151 |  0.0209\n",
      "00:45:56 05 | 16 |  0.0139 |  0.0164\n",
      "00:46:12 05 | 17 |  0.0151 |  0.0164\n",
      "00:46:27 05 | 18 |  0.0155 |  0.0137\n",
      "00:46:43 05 | 19 |  0.0147 |  0.0164\n",
      "00:46:58 05 | 20 |  0.0138 |  0.0168\n",
      "00:47:13 05 | 21 |  0.0144 |  0.0164\n",
      "00:47:29 05 | 22 |  0.0140 |  0.0168\n",
      "00:47:47 05 | 23 |  0.0111 |  0.0248\n",
      "00:48:03 05 | 24 |  0.0080 |  0.0208\n",
      "00:48:18 05 | 25 |  0.0111 |  0.0257\n",
      "00:48:35 06 | 01 |  0.0368 |  0.0532\n",
      "00:48:50 06 | 02 | -0.0328 | -0.0443\n",
      "00:49:06 06 | 03 |  0.0376 |  0.0643\n",
      "00:49:21 06 | 04 | -0.0410 | -0.0566\n",
      "00:49:37 06 | 05 | -0.0018 | -0.0057\n",
      "00:49:53 06 | 06 | -0.0281 | -0.0381\n",
      "00:50:08 06 | 07 | -0.0172 | -0.0147\n",
      "00:50:24 06 | 08 | -0.0404 | -0.0655\n",
      "00:50:47 06 | 09 | -0.0400 | -0.0718\n",
      "00:51:03 06 | 10 | -0.0370 | -0.0701\n",
      "00:51:23 06 | 11 | -0.0358 | -0.0385\n",
      "00:52:03 06 | 12 |  0.0387 |  0.0630\n",
      "00:52:45 06 | 13 | -0.0113 |  0.0012\n",
      "00:53:26 06 | 14 | -0.0268 | -0.0362\n",
      "00:54:11 06 | 15 | -0.0387 | -0.0555\n",
      "00:54:58 06 | 16 | -0.0130 |  0.0043\n",
      "00:55:43 06 | 17 | -0.0367 | -0.0502\n",
      "00:56:29 06 | 18 | -0.0205 | -0.0061\n",
      "00:57:15 06 | 19 | -0.0374 | -0.0775\n",
      "00:58:01 06 | 20 | -0.0355 | -0.0545\n",
      "00:58:46 06 | 21 | -0.0396 | -0.0652\n",
      "00:59:32 06 | 22 | -0.0391 | -0.0683\n",
      "01:00:17 06 | 23 | -0.0268 | -0.0544\n",
      "01:00:60 06 | 24 |  0.0311 |  0.0622\n",
      "01:01:43 06 | 25 | -0.0312 | -0.0360\n",
      "01:02:28 07 | 01 |  0.0166 |  0.0258\n",
      "01:03:12 07 | 02 |  0.0183 |  0.0096\n",
      "01:03:55 07 | 03 |  0.0184 |  0.0020\n",
      "01:04:39 07 | 04 |  0.0163 |  0.0178\n",
      "01:05:25 07 | 05 |  0.0176 |  0.0035\n",
      "01:06:09 07 | 06 |  0.0175 |  0.0053\n",
      "01:06:53 07 | 07 |  0.0171 |  0.0007\n",
      "01:07:37 07 | 08 |  0.0166 |  0.0091\n",
      "01:08:21 07 | 09 |  0.0182 |  0.0008\n",
      "01:09:01 07 | 10 |  0.0173 | -0.0088\n",
      "01:09:18 07 | 11 |  0.0165 |  0.0006\n",
      "01:09:34 07 | 12 |  0.0169 |  0.0098\n",
      "01:09:51 07 | 13 |  0.0172 | -0.0009\n",
      "01:10:08 07 | 14 |  0.0173 | -0.0013\n",
      "01:10:25 07 | 15 |  0.0174 |  0.0004\n",
      "01:10:45 07 | 16 |  0.0166 | -0.0089\n",
      "01:11:05 07 | 17 |  0.0163 | -0.0043\n",
      "01:11:21 07 | 18 |  0.0163 | -0.0076\n",
      "01:11:38 07 | 19 |  0.0162 | -0.0120\n",
      "01:11:56 07 | 20 |  0.0153 | -0.0138\n",
      "01:12:14 07 | 21 |  0.0154 | -0.0140\n",
      "01:12:33 07 | 22 |  0.0152 | -0.0116\n",
      "01:12:50 07 | 23 |  0.0156 |  0.0024\n",
      "01:13:07 07 | 24 |  0.0148 | -0.0146\n",
      "01:13:25 07 | 25 |  0.0150 | -0.0064\n",
      "01:13:44 08 | 01 | -0.0282 | -0.0496\n",
      "01:14:05 08 | 02 | -0.0278 | -0.0351\n",
      "01:14:25 08 | 03 | -0.0253 | -0.0328\n",
      "01:14:46 08 | 04 | -0.0260 | -0.0395\n",
      "01:15:05 08 | 05 |  0.0238 |  0.0348\n",
      "01:15:24 08 | 06 | -0.0270 | -0.0395\n",
      "01:15:42 08 | 07 |  0.0196 |  0.0148\n",
      "01:16:02 08 | 08 |  0.0225 |  0.0160\n",
      "01:16:21 08 | 09 |  0.0220 |  0.0073\n",
      "01:16:40 08 | 10 | -0.0255 | -0.0292\n",
      "01:16:57 08 | 11 |  0.0199 |  0.0230\n",
      "01:17:14 08 | 12 |  0.0197 |  0.0244\n",
      "01:17:31 08 | 13 |  0.0195 |  0.0249\n",
      "01:17:47 08 | 14 |  0.0176 |  0.0276\n",
      "01:18:04 08 | 15 | -0.0256 | -0.0178\n",
      "01:18:20 08 | 16 |  0.0166 |  0.0187\n",
      "01:18:37 08 | 17 | -0.0240 | -0.0253\n",
      "01:18:54 08 | 18 |  0.0151 |  0.0113\n",
      "01:19:10 08 | 19 | -0.0222 | -0.0216\n",
      "01:19:27 08 | 20 | -0.0223 | -0.0225\n",
      "01:19:43 08 | 21 |  0.0135 |  0.0103\n",
      "01:20:00 08 | 22 | -0.0213 | -0.0172\n",
      "01:20:16 08 | 23 |  0.0118 |  0.0134\n",
      "01:20:31 08 | 24 | -0.0206 | -0.0120\n",
      "01:20:47 08 | 25 | -0.0205 | -0.0132\n",
      "01:21:03 09 | 01 |  0.0191 |  0.0063\n",
      "01:21:19 09 | 02 |  0.0206 |  0.0043\n",
      "01:21:34 09 | 03 |  0.0209 |  0.0073\n",
      "01:21:50 09 | 04 |  0.0208 |  0.0121\n",
      "01:22:05 09 | 05 |  0.0215 |  0.0119\n",
      "01:22:20 09 | 06 |  0.0208 |  0.0208\n",
      "01:22:36 09 | 07 |  0.0223 |  0.0161\n",
      "01:22:51 09 | 08 |  0.0217 |  0.0140\n",
      "01:23:07 09 | 09 |  0.0214 |  0.0176\n",
      "01:23:23 09 | 10 |  0.0219 |  0.0162\n",
      "01:23:38 09 | 11 |  0.0215 |  0.0136\n",
      "01:23:53 09 | 12 |  0.0218 |  0.0110\n",
      "01:24:09 09 | 13 |  0.0220 |  0.0163\n",
      "01:24:24 09 | 14 |  0.0220 |  0.0150\n",
      "01:24:39 09 | 15 |  0.0214 |  0.0161\n",
      "01:24:55 09 | 16 |  0.0217 |  0.0188\n",
      "01:25:10 09 | 17 |  0.0233 |  0.0160\n",
      "01:25:25 09 | 18 |  0.0224 |  0.0137\n",
      "01:25:41 09 | 19 |  0.0215 |  0.0160\n",
      "01:25:56 09 | 20 |  0.0214 |  0.0174\n",
      "01:26:11 09 | 21 |  0.0218 |  0.0157\n",
      "01:26:27 09 | 22 |  0.0218 |  0.0159\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "01:26:42 09 | 23 |  0.0218 |  0.0164\n",
      "01:26:57 09 | 24 |  0.0213 |  0.0051\n",
      "01:27:13 09 | 25 |  0.0223 |  0.0076\n",
      "01:27:29 10 | 01 |  0.0089 |  0.0016\n",
      "01:27:45 10 | 02 | -0.0070 | -0.0001\n",
      "01:27:60 10 | 03 | -0.0059 |  0.0016\n",
      "01:28:16 10 | 04 | -0.0051 |  0.0005\n",
      "01:28:31 10 | 05 | -0.0044 |  0.0033\n",
      "01:28:46 10 | 06 | -0.0032 | -0.0014\n",
      "01:29:02 10 | 07 | -0.0024 |  0.0004\n",
      "01:29:17 10 | 08 | -0.0008 | -0.0013\n",
      "01:29:32 10 | 09 | -0.0016 | -0.0021\n",
      "01:29:48 10 | 10 | -0.0019 | -0.0017\n",
      "01:30:03 10 | 11 | -0.0006 | -0.0005\n",
      "01:30:19 10 | 12 |  0.0014 |  0.0026\n",
      "01:30:34 10 | 13 |  0.0048 |  0.0141\n",
      "01:30:49 10 | 14 |  0.0050 |  0.0007\n",
      "01:31:05 10 | 15 |  0.0055 |  0.0010\n",
      "01:31:20 10 | 16 |  0.0047 |  0.0129\n",
      "01:31:36 10 | 17 |  0.0057 | -0.0032\n",
      "01:31:51 10 | 18 |  0.0047 | -0.0050\n",
      "01:32:06 10 | 19 |  0.0038 |  0.0029\n",
      "01:32:22 10 | 20 |  0.0017 | -0.0004\n",
      "01:32:37 10 | 21 |  0.0045 |  0.0060\n",
      "01:32:53 10 | 22 |  0.0041 |  0.0026\n",
      "01:33:08 10 | 23 |  0.0054 |  0.0071\n",
      "01:33:24 10 | 24 |  0.0049 |  0.0072\n",
      "01:33:39 10 | 25 |  0.0044 |  0.0005\n",
      "01:33:56 11 | 01 |  0.0033 |  0.0025\n",
      "01:34:11 11 | 02 | -0.0007 |  0.0106\n",
      "01:34:27 11 | 03 |  0.0191 |  0.0160\n",
      "01:34:42 11 | 04 |  0.0185 |  0.0149\n",
      "01:34:58 11 | 05 |  0.0172 |  0.0160\n",
      "01:35:13 11 | 06 |  0.0229 |  0.0175\n",
      "01:35:29 11 | 07 |  0.0133 |  0.0095\n",
      "01:35:44 11 | 08 |  0.0165 |  0.0101\n",
      "01:35:60 11 | 09 |  0.0203 |  0.0061\n",
      "01:36:15 11 | 10 |  0.0197 |  0.0043\n",
      "01:36:31 11 | 11 |  0.0195 |  0.0091\n",
      "01:36:46 11 | 12 |  0.0196 |  0.0168\n",
      "01:37:02 11 | 13 |  0.0154 |  0.0098\n",
      "01:37:17 11 | 14 |  0.0163 |  0.0130\n",
      "01:37:33 11 | 15 |  0.0164 |  0.0099\n",
      "01:37:48 11 | 16 |  0.0150 |  0.0121\n",
      "01:38:04 11 | 17 |  0.0197 |  0.0109\n",
      "01:38:19 11 | 18 |  0.0194 |  0.0123\n",
      "01:38:35 11 | 19 |  0.0156 |  0.0145\n",
      "01:38:50 11 | 20 |  0.0193 |  0.0104\n",
      "01:39:05 11 | 21 |  0.0157 |  0.0131\n",
      "01:39:21 11 | 22 |  0.0188 |  0.0092\n",
      "01:39:36 11 | 23 |  0.0167 |  0.0121\n",
      "01:39:52 11 | 24 |  0.0226 |  0.0162\n",
      "01:40:07 11 | 25 |  0.0228 |  0.0216\n",
      "01:40:25 12 | 01 |  0.0032 |  0.0018\n",
      "01:40:40 12 | 02 |  0.0012 | -0.0024\n",
      "01:40:56 12 | 03 |  0.0017 | -0.0028\n",
      "01:41:11 12 | 04 |  0.0004 | -0.0047\n",
      "01:41:27 12 | 05 |  0.0008 |  0.0034\n",
      "01:41:43 12 | 06 |  0.0029 | -0.0014\n",
      "01:41:58 12 | 07 | -0.0009 | -0.0043\n",
      "01:42:14 12 | 08 | -0.0005 |  0.0001\n",
      "01:42:29 12 | 09 |  0.0014 |  0.0033\n",
      "01:42:45 12 | 10 |  0.0019 |  0.0145\n",
      "01:43:00 12 | 11 |  0.0019 |  0.0083\n",
      "01:43:16 12 | 12 |  0.0029 |  0.0055\n",
      "01:43:32 12 | 13 | -0.0020 |  0.0090\n",
      "01:43:47 12 | 14 |  0.0023 |  0.0108\n",
      "01:44:03 12 | 15 |  0.0014 |  0.0137\n",
      "01:44:19 12 | 16 |  0.0024 |  0.0149\n",
      "01:44:34 12 | 17 | -0.0005 |  0.0071\n",
      "01:44:50 12 | 18 |  0.0008 | -0.0041\n",
      "01:45:05 12 | 19 |  0.0060 |  0.0079\n",
      "01:45:21 12 | 20 |  0.0046 |  0.0063\n",
      "01:45:36 12 | 21 |  0.0047 |  0.0003\n",
      "01:45:52 12 | 22 |  0.0048 |  0.0067\n",
      "01:46:08 12 | 23 |  0.0104 |  0.0112\n",
      "01:46:23 12 | 24 |  0.0092 |  0.0106\n",
      "01:46:39 12 | 25 |  0.0061 |  0.0083\n",
      "01:46:56 13 | 01 |  0.0028 | -0.0013\n",
      "01:47:11 13 | 02 | -0.0043 | -0.0047\n",
      "01:47:27 13 | 03 | -0.0055 | -0.0003\n",
      "01:47:43 13 | 04 |  0.0089 |  0.0030\n",
      "01:47:58 13 | 05 | -0.0005 |  0.0017\n",
      "01:48:14 13 | 06 |  0.0059 |  0.0003\n",
      "01:48:29 13 | 07 |  0.0032 | -0.0009\n",
      "01:48:45 13 | 08 |  0.0052 |  0.0043\n",
      "01:49:00 13 | 09 |  0.0024 | -0.0055\n",
      "01:49:16 13 | 10 |  0.0042 | -0.0021\n",
      "01:49:32 13 | 11 |  0.0065 | -0.0014\n",
      "01:49:47 13 | 12 |  0.0076 |  0.0019\n",
      "01:50:03 13 | 13 |  0.0038 |  0.0028\n",
      "01:50:18 13 | 14 |  0.0089 |  0.0142\n",
      "01:50:34 13 | 15 |  0.0041 |  0.0150\n",
      "01:50:50 13 | 16 |  0.0033 | -0.0000\n",
      "01:51:05 13 | 17 |  0.0092 |  0.0160\n",
      "01:51:21 13 | 18 |  0.0095 |  0.0140\n",
      "01:51:36 13 | 19 |  0.0090 |  0.0048\n",
      "01:51:52 13 | 20 |  0.0095 |  0.0117\n",
      "01:52:07 13 | 21 |  0.0074 | -0.0040\n",
      "01:52:23 13 | 22 |  0.0089 |  0.0071\n",
      "01:52:39 13 | 23 |  0.0117 |  0.0107\n",
      "01:52:54 13 | 24 |  0.0086 |  0.0102\n",
      "01:53:10 13 | 25 |  0.0093 |  0.0136\n",
      "01:53:27 14 | 01 | -0.0091 | -0.0015\n",
      "01:53:42 14 | 02 |  0.0021 |  0.0094\n",
      "01:53:58 14 | 03 |  0.0038 |  0.0078\n",
      "01:54:14 14 | 04 | -0.0007 | -0.0015\n",
      "01:54:30 14 | 05 |  0.0028 | -0.0039\n",
      "01:54:46 14 | 06 |  0.0003 | -0.0152\n",
      "01:55:01 14 | 07 | -0.0011 | -0.0002\n",
      "01:55:17 14 | 08 |  0.0191 |  0.0185\n",
      "01:55:33 14 | 09 |  0.0222 |  0.0209\n",
      "01:55:48 14 | 10 |  0.0200 |  0.0234\n",
      "01:56:04 14 | 11 |  0.0217 |  0.0298\n",
      "01:56:20 14 | 12 |  0.0205 |  0.0182\n",
      "01:56:36 14 | 13 |  0.0205 |  0.0198\n",
      "01:56:52 14 | 14 |  0.0173 |  0.0172\n",
      "01:57:07 14 | 15 |  0.0141 |  0.0079\n",
      "01:57:23 14 | 16 |  0.0042 | -0.0048\n",
      "01:57:38 14 | 17 |  0.0059 | -0.0006\n",
      "01:57:55 14 | 18 |  0.0051 | -0.0025\n",
      "01:58:11 14 | 19 |  0.0030 | -0.0032\n",
      "01:58:26 14 | 20 |  0.0052 | -0.0074\n",
      "01:58:42 14 | 21 |  0.0055 |  0.0001\n",
      "01:58:58 14 | 22 |  0.0089 |  0.0003\n",
      "01:59:13 14 | 23 |  0.0083 |  0.0034\n",
      "01:59:29 14 | 24 |  0.0071 | -0.0024\n",
      "01:59:45 14 | 25 |  0.0058 | -0.0044\n",
      "02:00:02 15 | 01 |  0.0247 |  0.0271\n",
      "02:00:18 15 | 02 |  0.0268 |  0.0286\n",
      "02:00:34 15 | 03 |  0.0331 |  0.0284\n",
      "02:00:49 15 | 04 |  0.0324 |  0.0265\n",
      "02:01:05 15 | 05 |  0.0337 |  0.0447\n",
      "02:01:21 15 | 06 |  0.0295 |  0.0335\n",
      "02:01:36 15 | 07 |  0.0286 |  0.0257\n",
      "02:01:52 15 | 08 |  0.0349 |  0.0440\n",
      "02:02:08 15 | 09 |  0.0327 |  0.0358\n",
      "02:02:24 15 | 10 |  0.0326 |  0.0412\n",
      "02:02:39 15 | 11 |  0.0323 |  0.0394\n",
      "02:02:55 15 | 12 |  0.0312 |  0.0396\n",
      "02:03:11 15 | 13 |  0.0326 |  0.0325\n",
      "02:03:26 15 | 14 |  0.0320 |  0.0280\n",
      "02:03:42 15 | 15 |  0.0288 |  0.0339\n",
      "02:03:58 15 | 16 |  0.0321 |  0.0263\n",
      "02:04:14 15 | 17 |  0.0320 |  0.0293\n",
      "02:04:29 15 | 18 |  0.0320 |  0.0331\n",
      "02:04:45 15 | 19 |  0.0305 |  0.0259\n",
      "02:05:01 15 | 20 |  0.0303 |  0.0275\n",
      "02:05:16 15 | 21 |  0.0330 |  0.0291\n",
      "02:05:32 15 | 22 |  0.0224 |  0.0262\n",
      "02:05:48 15 | 23 |  0.0310 |  0.0321\n",
      "02:06:03 15 | 24 |  0.0318 |  0.0412\n",
      "02:06:20 15 | 25 |  0.0240 |  0.0405\n",
      "02:06:39 16 | 01 |  0.0104 |  0.0103\n",
      "02:06:57 16 | 02 |  0.0111 |  0.0128\n",
      "02:07:15 16 | 03 |  0.0045 |  0.0103\n",
      "02:07:32 16 | 04 |  0.0043 |  0.0062\n",
      "02:07:49 16 | 05 |  0.0098 |  0.0115\n",
      "02:08:06 16 | 06 |  0.0072 |  0.0053\n",
      "02:08:24 16 | 07 |  0.0032 |  0.0024\n",
      "02:08:41 16 | 08 | -0.0021 |  0.0047\n",
      "02:08:59 16 | 09 | -0.0033 |  0.0016\n",
      "02:09:17 16 | 10 | -0.0039 |  0.0061\n",
      "02:09:36 16 | 11 | -0.0046 | -0.0009\n",
      "02:09:53 16 | 12 | -0.0034 |  0.0021\n",
      "02:10:11 16 | 13 | -0.0039 | -0.0042\n",
      "02:10:28 16 | 14 | -0.0085 | -0.0027\n",
      "02:10:45 16 | 15 | -0.0044 | -0.0058\n",
      "02:11:04 16 | 16 |  0.0036 |  0.0019\n",
      "02:11:21 16 | 17 |  0.0270 |  0.0306\n",
      "02:11:39 16 | 18 | -0.0191 | -0.0265\n",
      "02:11:56 16 | 19 |  0.0214 |  0.0231\n",
      "02:12:14 16 | 20 |  0.0252 |  0.0248\n",
      "02:12:31 16 | 21 | -0.0201 | -0.0245\n",
      "02:12:49 16 | 22 | -0.0191 | -0.0085\n",
      "02:13:06 16 | 23 | -0.0124 | -0.0103\n",
      "02:13:23 16 | 24 | -0.0069 | -0.0005\n",
      "02:13:41 16 | 25 | -0.0121 | -0.0155\n"
     ]
    }
   ],
   "source": [
    "start = time()\n",
    "ic  = []\n",
    "for fold, (train_idx, test_idx) in enumerate(cv.split(features)):\n",
    "    X_train, y_train, X_val, y_val = get_train_valid_data(features, target, train_idx, test_idx)\n",
    "    preds = y_val.to_frame('actual')\n",
    "    r = pd.DataFrame(index=y_val.index.unique(level='date')).sort_index()\n",
    "    model = make_model(filter1=16, act1='relu', filter2=32, \n",
    "                       act2='relu', do1=.25, do2=.5, dense=32)\n",
    "    best_mean = best_median = -np.inf\n",
    "    for epoch in range(25):         \n",
    "        model.fit(X_train, y_train,\n",
    "                  batch_size=batch_size,\n",
    "                  validation_data=(X_val, y_val),\n",
    "                  epochs=epoch + 1,\n",
    "                  initial_epoch=epoch,\n",
    "                  verbose=0, shuffle=True)\n",
    "        model.save_weights((checkpoint_path / f'ckpt_{fold}_{epoch}').as_posix())\n",
    "        preds[epoch] = model.predict(X_val).squeeze()\n",
    "        r[epoch] = preds.groupby(level='date').apply(lambda x: spearmanr(x.actual, x[epoch])[0]).to_frame(epoch)\n",
    "        print(f'{format_time(time()-start)} {fold + 1:02d} | {epoch + 1:02d} | {r[epoch].mean():7.4f} | {r[epoch].median():7.4f}')\n",
    "    ic.append(r.assign(fold=fold))\n",
    "ic = pd.concat(ic)\n",
    "ic.to_csv(checkpoint_path / 'ic.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Evaluate results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T00:10:03.252876Z",
     "start_time": "2020-06-22T00:10:02.315181Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ic.groupby('fold').mean().boxplot();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T00:10:03.480748Z",
     "start_time": "2020-06-22T00:10:03.254115Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ic.groupby('fold').mean().mean().sort_index().plot.bar(rot=0);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T00:10:04.662582Z",
     "start_time": "2020-06-22T00:10:03.482556Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1008x432 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cmap = sns.diverging_palette(h_neg=20, h_pos=210)\n",
    "fig, ax = plt.subplots(figsize=(14, 6))\n",
    "sns.heatmap(ic.groupby('fold').mean().mul(100), ax=ax, center=0, cmap=cmap, annot=True, fmt='.1f')\n",
    "fig.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Make Predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T00:10:04.669663Z",
     "start_time": "2020-06-22T00:10:04.664068Z"
    }
   },
   "outputs": [],
   "source": [
    "def generate_predictions(epoch):\n",
    "    predictions = []\n",
    "    for fold, (train_idx, test_idx) in enumerate(cv.split(features)):\n",
    "        X_train, y_train, X_val, y_val = get_train_valid_data(features, target, train_idx, test_idx)\n",
    "        preds = y_val.to_frame('actual')\n",
    "        model = make_model(filter1=16, act1='relu', filter2=32, \n",
    "                       act2='relu', do1=.25, do2=.5, dense=32)\n",
    "        status = model.load_weights((checkpoint_path / f'ckpt_{fold}_{epoch}').as_posix())\n",
    "        status.expect_partial()\n",
    "        predictions.append(pd.Series(model.predict(X_val).squeeze(), index=y_val.index))\n",
    "    return pd.concat(predictions)        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T00:12:56.107624Z",
     "start_time": "2020-06-22T00:10:04.670819Z"
    }
   },
   "outputs": [],
   "source": [
    "preds = {}\n",
    "for i, epoch in enumerate(ic.drop('fold', axis=1).mean().nlargest(5).index):\n",
    "    preds[i] = generate_predictions(epoch)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T00:12:56.689444Z",
     "start_time": "2020-06-22T00:12:56.108756Z"
    }
   },
   "outputs": [],
   "source": [
    "with pd.HDFStore(results_path / 'predictions.h5') as store:\n",
    "    store.put('predictions', pd.DataFrame(preds).sort_index())"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
